package com.config;

import lombok.SneakyThrows;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;


/**
 * rcjava配置类
 *
 * @author zyf
 */
public class RCjavaConfiguration {

    protected Logger logger = LoggerFactory.getLogger(getClass());
    protected static Logger static_logger = LoggerFactory.getLogger(RCjavaConfiguration.class);

    public static PropertiesConfiguration globalConfig;
    public static String clientIp;
    public static String clientPort;
    public static String clientHost;
    public static String jksPath;
    public static String jksName;
    public static String jksAlias;
    public static String jksPassword;

    static {
        try {
            globalConfig = new PropertiesConfiguration("rcjava.properties");
            clientIp = globalConfig.getString("client.ip");
            clientPort = globalConfig.getString("client.port");
            clientHost = globalConfig.getString("client.host");
            jksPath = globalConfig.getString("jks.path");
            jksName = globalConfig.getString("jks.name");
            jksAlias = globalConfig.getString("jks.alias");
            jksPassword = globalConfig.getString("jks.password");

        } catch (ConfigurationException e) {
            static_logger.error("读取错误", e.getMessage(), e);
            e.printStackTrace();
        }
    }

    // 默认的名字叫做rcjava.properties;
    // 可通过设置名字，来从classpath中寻找;
    protected String rcJavaPropsName = "rcjava.properties";
    protected File rcJavaPropsFile = null;
    protected PropertiesConfiguration rcJavaConfig = null;

    @SneakyThrows(ConfigurationException.class)
    public RCjavaConfiguration() {
        this.rcJavaConfig = new PropertiesConfiguration(rcJavaPropsName);
        logger.info("使用默认propsName:{}构造实例", rcJavaPropsName);
    }

    @SneakyThrows(ConfigurationException.class)
    public RCjavaConfiguration(String rcJavaPropsName) {
        this.rcJavaPropsName = rcJavaPropsName;
        this.rcJavaConfig = new PropertiesConfiguration(rcJavaPropsName);
        logger.info("使用rcJavaPropsName{}构造实例", rcJavaPropsName);
    }

    @SneakyThrows(ConfigurationException.class)
    public RCjavaConfiguration(File rcJavaPropsFile) {
        this.rcJavaPropsFile = rcJavaPropsFile;
        this.rcJavaConfig = new PropertiesConfiguration(rcJavaPropsFile);
        logger.info("使用文件{}构造实例", rcJavaPropsFile.getPath());
    }

    /**
     * 根据propsFile 或者是 propsName加载配置，默认是用name先加载，找不到再用File加载
     */
    public void loadRcJavaConfig() {
        try {
            if (rcJavaPropsFile != null && rcJavaPropsFile.exists()) {
                this.rcJavaConfig = new PropertiesConfiguration(rcJavaPropsFile);
            } else {
                this.rcJavaConfig = (rcJavaPropsName.equals("rcjava.properties")) ? rcJavaConfig : new PropertiesConfiguration(rcJavaPropsName);
                logger.info("rcJavaPropsName: {}", rcJavaPropsName);
            }
        } catch (ConfigurationException cfEx) {
            cfEx.printStackTrace();
            logger.error("获取配置文件出错", cfEx);
        }
    }

    public void setRcJavaPropsName(String rcJavaPropsName) {
        this.rcJavaPropsName = rcJavaPropsName;
    }

    public void setRcJavaPropsFile(File rcJavaPropsFile) {
        this.rcJavaPropsFile = rcJavaPropsFile;
    }

    public PropertiesConfiguration getRcJavaConfig() {
        return rcJavaConfig;
    }

}
